/**
 * # 模块 Api 类:
 *  Profile - 用户资料
 * 
 * # 描述:
 *  向每一位用户提供用户资料修改、密码设置、头像更改等功能。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.authority.profile;

/**
 * 提供对模块 用户资料 中功能的封装和调用。
 */
@pittypat.ModuleAnnotation(presentation = pittypat.ModulePresentation.UI, allowAnonymous = false)
public final class Api extends pittypat.Module {
	/**
	 * 设置当前用户的资料。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson set(pittypat.FunctionModel<com.waln.authority.profile.args.Set> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}

	/**
	 * 设置当前用户的登录密码。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson setPassword(pittypat.FunctionModel<com.waln.authority.profile.args.SetPassword> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}

	/**
	 * 设置当前用户的头像。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 原头像路径，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson setFace(pittypat.FunctionModel<com.waln.authority.profile.args.SetFace> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);
		if (model.isSuccess()) {
			pittypat.web.VirtualFile.delete(model.getArgs().oldFaceUrl);
		} else {
			pittypat.web.VirtualFile.delete(model.getArgs().faceUrl);
		}

		return null;
	}
}
